home *** CD-ROM | disk | FTP | other *** search
-
- timerc = $114
-
- cdcr = $fffffa1d
- tcdr = $fffffa23
-
- frames_per_sec
-
- *-------------------------------------------------------*
- init_timing:
- *-------------------------------------------------------*
- push.w sr
- move.w #$2700,sr
- ifd debuggable
- move.l $4d2.w,old_vbi
- move.l #new_vbi,$4d2.w
- elseif
- move.l $70.w,old_vbi
- move.l #new_vbi,$70.w
- endc
- ifd enable_timing
- move.l timerc.w,old_timerc
- move.l #framecounter,timerc.w
- and.b #%00001111,cdcr.w
- move.b #192,tcdr.w ; 2457600/192 = 12800Hz
- or.b #(5<<4),cdcr.w ; 12800/64 = 200Hz
- endc
- pop.w sr
- ifd enable_timing
- bsr init_font
- endc
- rts
-
- *-------------------------------------------------------*
- reset_timing:
- *-------------------------------------------------------*
- push.w sr
- move.w #$2700,sr
- ifd enable_timing
- move.l old_timerc,timerc.w
- endc
- ifd debuggable
- move.l old_vbi,$4d2.w
- elseif
- move.l old_vbi,$70.w
- endc
- pop.w sr
- rts
-
- *-------------------------------------------------------*
- timing:
- *-------------------------------------------------------*
- ifd enable_timing
- move.w #8,char_x
- move.w #8,char_y
- move.w #$FFFF,char_col
- lea stringspace,a0
- clr.b (a0)
- move.l a0,numtext_ptr
- ifd frames_per_sec
- lea fps,a0
- bsr pushtext
- bsr average_times
- move.l #200*8,d0
- swap d0
- divu.l d1,d0
- push.l d0
- mulu.w #10000,d0
- swap d0
- ext.l d0
- moveq #4,d7
- bsr pushdigits
- lea point,a0
- bsr pushtext
- pop.l d0
- swap d0
- ext.l d0
- moveq #1,d7
- bsr pushdigits
- elseif
- lea frames,a0
- bsr pushtext
- bsr average_times
- move.l d1,d0
- moveq #1,d7
- bsr pushdigits
- endc
- move.l numtext_ptr,a0
- jsr print_line
- endc
- rts
-
- *-------------------------------------------------------*
- average_times:
- *-------------------------------------------------------*
- ifd frames_per_sec
- lea fc_history,a0
- moveq #8-2,d0
- move.l fpsc,d1
- clr.l fpsc
- move.l d1,d3
- .lp: move.l 4(a0),d2
- add.l d2,d1
- move.l d2,(a0)+
- dbra d0,.lp
- move.l d3,(a0)
- add.l fpso,d1
- lsr.l d1
- move.l d1,fpso
- elseif
- move.l ovbls,d1
- add.l vbls,d1
- clr.l vbls
- lsr.l d1
- move.l d1,ovbls
- endc
- rts
-
- *-------------------------------------------------------*
- pushdigits:
- *-------------------------------------------------------*
- ; d0 = number
- move.l numtext_ptr,a0
- move.l a0,a1
- moveq #'0',d3
- move.l d3,d1
- moveq #10,d4
- tst.l d0
- beq.s .zero
- .loop ext.l d0
- divu d4,d0
- move.l d0,d1
- swap d1
- add.w d3,d1
- .zero: move.b d1,-(a0)
- subq.l #1,d7
- bgt.s .loop
- tst.w d0
- bne.s .loop
- move.l a0,numtext_ptr
- rts
-
- *-------------------------------------------------------*
- pushtext:
- *-------------------------------------------------------*
- move.l numtext_ptr,a1
- moveq #-1,d0
- .lp addq.l #1,d0
- tst.b (a0)+
- bne.s .lp
- subq.l #1,a0
- bra.s .go
- .cop: move.b -(a0),-(a1)
- .go: dbra d0,.cop
- move.l a1,numtext_ptr
- rts
-
- *-------------------------------------------------------*
- * Print single character *
- *-------------------------------------------------------*
- * d0 character *
- * a1 screen *
- *-------------------------------------------------------*
- print_char:
- *-------------------------------------------------------*
- move.w char_y,d7
- move.l a1,a3
- mulu scrwidth,d7
- add.l d7,d7
- add.l d7,a3
- move.w char_x,d7
- ext.l d7
- add.l d7,d7
- add.l d7,a3
- lea (a6,d0.w),a2
- move.w char_col,d1
- move.w #256,d6
- move.w scrwidth,d7
- ext.l d6
- ext.l d7
- add.l d7,d7
- moveq #6-1,d4
- moveq #0,d3
- .ylp move.l a3,a5
- move.b (a2),d0
- add.b d0,d0
- bcc.s .n1
- move.w d1,(a5)
- .n1 addq.l #2,a5
- add.b d0,d0
- bcc.s .n2
- move.w d1,(a5)
- .n2 addq.l #2,a5
- add.b d0,d0
- bcc.s .n3
- move.w d1,(a5)
- .n3 addq.l #2,a5
- add.b d0,d0
- bcc.s .n4
- move.w d1,(a5)
- .n4 addq.l #2,a5
- add.b d0,d0
- bcc.s .n5
- move.w d1,(a5)
- .n5 addq.l #2,a5
- add.b d0,d0
- bcc.s .n6
- move.w d1,(a5)
- .n6 addq.l #2,a5
- tst.b d3
- beq.s .next
- add.b d0,d0
- bcc.s .n7
- move.w d1,(a5)
- .n7 addq.l #2,a5
- add.b d0,d0
- bcc.s .next
- move.w d1,(a5)
- .next add.l d6,a2
- add.l d7,a3
- dbra d4,.ylp
- rts
-
- *-------------------------------------------------------*
- print_line:
- *-------------------------------------------------------*
- pushall
- move.l fontptr,a6
- move.l screen,a1
- .loop moveq #0,d0
- move.b (a0)+,d0
- beq.s .out
- cmp.w #27,d0
- beq.s .ctrl
- bsr print_char
- move.w textgap,d0
- add.w d0,char_x
- bra.s .loop
- .out popall
- rts
- .ctrl move.b (a0)+,d0
- cmp.b #"Y",d0
- beq.s .pos
- bra.s .loop
- .pos moveq #0,d0
- move.b (a0)+,d0
- move.w d0,char_x
- moveq #0,d0
- move.b (a0)+,d0
- add.w d0,char_x
- moveq #0,d0
- move.b (a0)+,d0
- move.w d0,char_y
- bra.s .loop
-
- *-------------------------------------------------------*
- init_font:
- *-------------------------------------------------------*
- move.w #6,textgap
- move.l #font,fontptr
- move.l fontptr,a0
- lea truefont,a1
- move.w #256-1,d0
- .char: move.b (a0)+,(a1)
- move.b (a0)+,256*1(a1)
- move.b (a0)+,256*2(a1)
- move.b (a0)+,256*3(a1)
- move.b (a0)+,256*4(a1)
- move.b (a0)+,256*5(a1)
- addq.l #1,a1
- dbra d0,.char
- lea truefont,a0
- move.l fontptr,a1
- move.w #256-1,d0
- .copy move.l (a0)+,(a1)+
- move.w (a0)+,(a1)+
- dbra d0,.copy
- rts
-
- *-------------------------------------------------------*
- framecounter:
- *-------------------------------------------------------*
- addq.l #1,fpsc
- ifd debuggable
- jmp ([old_timerc.l])
- elseif
- bclr #5,$FFFFFA11.w
- rte
- endc
-
- *-------------------------------------------------------*
- new_vbi:
- *-------------------------------------------------------*
- tst.w timer
- beq.s .nd
- subq.w #1,timer
- .nd: addq.l #1,vbls
- addq.w #1,frame
- ifd debuggable
- rts
- elseif
- rte
- endc
-
- *-------------------------------------------------------*
- data
- *-------------------------------------------------------*
-
- fps: dc.b " FPS",0
- frames: dc.b " VBL",0
- point: dc.b ".",0
- even
-
- *-------------------------------------------------------*
- bss
- *-------------------------------------------------------*
-
- old_vbi: ds.l 1
- old_timerc: ds.l 1
-
- numtext_ptr: ds.l 1
-
- timer: ds.w 1
- vbls: ds.l 1
- ovbls: ds.l 1
- fpsc: ds.l 1
- fpso: ds.l 1
- fc_history: ds.l 8
- char_x: ds.w 1
- char_y: ds.w 1
- char_col: ds.w 1
- textgap: ds.w 1
- fontptr: ds.l 1
-
- ds.b 256
- stringspace: ds.b 1
- even
-
- truefont: ds.w 256*8*8
-
- *-------------------------------------------------------*
- text
- *-------------------------------------------------------*
-